/**
 * @author Thomas Pfeiffer
 * @file   CrypterFactory.h
 * @brief  Declaration of the CrypterFactory class.
 */
#ifndef CRYPTERFACTORY_H
#define CRYPTERFACTORY_H

#include <string>
#include "Crypter.h"

/**
 * @class CrypterFactory
 * @brief Creates concrete Crypto Algorithms.
 * The class CrypterFactory implements a factory method
 * to Create concrete Crypto Algorithms
 */
class CrypterFactory : public Object {
public:

	/**
	 * @enum  TAlgorithm
	 * @brief Determines which Concrete Crypto algorithms can be created.
	 */
	enum TAlgorithm {
		eRSA,
		eCaesar
	};

	/**
	 * @brief Creates a Concrete Crypto Algorithm Object.
	 * The Function CreateCrypter creates an Object of a
	 * concrete Crypte Algorithm depending on the Parameter
	 * enc.
	 * @param[in] enc The Type of the desired Algorithm
	 * @return A Pointer to a concrete Algorithm Object
	 */
	static Crypter* CreateCrypter(TAlgorithm enc);
};

#endif